﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using UtilityExtensions;
using DAL;
using BOL;
using System.Drawing;

namespace UILGestion.Rpt
{
    public partial class ExportExcelForm : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
           
            idObra.Value = Request.QueryString["idObra"];
            idProyecto.Value = Request.QueryString["idProyecto"];
            type.Value = Request.QueryString["type"]; 
            LoadExcel();
            
        }
        private void LoadExcel()
        {
            var login = Session["idEmpleado"];
            if (login == null) { throw new Exception("Debe Ingresar al sistema"); }

            switch (type.Value)
            {

                case "CENTROCOSTO":
                    LoadCentroCostoExcel();
                    break;

                case "COMPARATIVO":

                     LoadComparativo();
                    break;
                case "ORDENCOMPRA":

                    LoadOrdenCompra(1);
                    break;

                case "GASTOOBRA":

                    LoadOrdenCompra(2);
                    break;
                case "UI":

                    LoadUI();
                    break;

                case "ORDENVENTA":
                    LoadOrdenVenta();
                    break;

                case "PROFORMA":
                    LoadProforma();
                    break;
                
                case "DEPOSITOVENTA":
                    LoadDepositoVenta();
                    break;

                case "COBRANZA":
                    LoadCobranza();
                    break;

                case "VENTAS":
                    LoadVentas();
                    break;

                case "ORDENCOMPRADETALLE":

                    LoadOrdenCompraItem();
                    break;

                case "VENTAANULA":

                    LoadVENTAANULA();
                    break;
    
            }
        }

        private void LoadVENTAANULA()
        {
            var labelNameFormat = Request.QueryString["format"];
            var r = Response;
            r.Clear();

            var proyecto = DbUtil.Db.Proyectos.SingleOrDefault(p => p.idInternal == idProyecto.Value.ToInt());

            string header =
                @"<html xmlns:x=""urn:schemas-microsoft-com:office:excel"">
                <head>
                    <style>
                    <!--table
                    br {mso-data-placement:same-cell;}
                    tr {vertical-align:top;}
                    -->
                    </style>
                </head>
                <body>";
            r.Charset = "";

            if (proyecto == null)
            {
                r.Write("No se tiene información");
                r.Flush();
                r.End();
            }



            r.ContentType = "application/vnd.ms-excel";
            r.AddHeader("Content-Disposition", "attachment;filename=Ventas_{0}.xls".Fmt(proyecto.descripcion));


            r.Write(header);

            var idEtapa = Request.QueryString["idEtapa"].ToInt();

            int idLocalizacion = Request.QueryString["localizacion"].ToInt();
            int idTipoUI = Request.QueryString["tipoUI"].ToInt();
            int anio = Request.QueryString["anio"].ToInt();
            int mes = Request.QueryString["mes"].ToInt();

            GridView12.EnableViewState = false;
            GridView12.DataSource = new BOL.Ventas.OrdenVentaBL().GetOrdenVentaAnuladoDetalleMASTOTAL(
                                        proyecto.idInternal,
                                       idEtapa,
                                        idLocalizacion,
                                        idTipoUI,
                                        anio,
                                        mes);

            GridView12.DataBind();
            GridView12.RenderControl(new HtmlTextWriter(r.Output));



            r.Write("</body></HTML>");
            r.Flush();
            r.End();
        }

        private void LoadVentas()
        {
            var labelNameFormat = Request.QueryString["format"];
            var r = Response;
            r.Clear();

            var proyecto = DbUtil.Db.Proyectos.SingleOrDefault(p => p.idInternal == idProyecto.Value.ToInt());

            string header =
                @"<html xmlns:x=""urn:schemas-microsoft-com:office:excel"">
                <head>
                    <style>
                    <!--table
                    br {mso-data-placement:same-cell;}
                    tr {vertical-align:top;}
                    -->
                    </style>
                </head>
                <body>";
            r.Charset = "";

            if (proyecto == null)
            {
                r.Write("No se tiene información");
                r.Flush();
                r.End();
            }



            r.ContentType = "application/vnd.ms-excel";
            r.AddHeader("Content-Disposition", "attachment;filename=Ventas_{0}.xls".Fmt(proyecto.descripcion));


            r.Write(header);

            var idEtapa = Request.QueryString["idEtapa"].ToInt();
            
            int idLocalizacion = Request.QueryString["localizacion"].ToInt();
            int idTipoUI = Request.QueryString["tipoUI"].ToInt();
                int anio = Request.QueryString["anio"].ToInt();
                int mes= Request.QueryString["mes"].ToInt();

                GridView11.EnableViewState = false;
                GridView11.DataSource = new BOL.Ventas.OrdenVentaBL().GetOrdenVentaDetalleMASTOTAL(
                                            proyecto.idInternal,
                                            7, 
                                            idEtapa, 
                                            idLocalizacion, 
                                            idTipoUI, 
                                            anio,
                                            mes,
                                            1);

                GridView11.DataBind();
                GridView11.RenderControl(new HtmlTextWriter(r.Output));



            r.Write("</body></HTML>");
            r.Flush();
            r.End();
        }

        private void LoadCobranza()
        {
            var labelNameFormat = Request.QueryString["format"];
            var r = Response;
            r.Clear();

            var proyecto = DbUtil.Db.Proyectos.SingleOrDefault(p => p.idInternal == idProyecto.Value.ToInt());

            string header =
                @"<html xmlns:x=""urn:schemas-microsoft-com:office:excel"">
                <head>
                    <style>
                    <!--table
                    br {mso-data-placement:same-cell;}
                    tr {vertical-align:top;}
                    -->
                    </style>
                </head>
                <body>";
            r.Charset = "";

            if (proyecto == null)
            {
                r.Write("No se tiene información");
                r.Flush();
                r.End();
            }

            r.ContentType = "application/vnd.ms-excel";
            r.AddHeader("Content-Disposition", "attachment;filename=cobranzas_{0}.xls".Fmt(proyecto.descripcion));


            r.Write(header);

            var idEtapa = Request.QueryString["idEtapa"].ToInt();


            int  idConcepto= Request.QueryString["concepto"].ToInt();

            int idLocalizacion = Request.QueryString["localizacion"].ToInt();
            int idTipoUI = Request.QueryString["tipoUI"].ToInt();
            int idEstado = Request.QueryString["idEstado"].ToInt();
            


            GridView9.EnableViewState = false;
            GridView9.DataSource = new BOL.Ventas.OrdenVentaBL().GetOrdenVentaFormatoDetalleMASTOTAL(proyecto.idInternal,
                                            0, idEtapa, idConcepto, idLocalizacion, idTipoUI, idEstado);
                                                                                        
            GridView9.DataBind();
            GridView9.RenderControl(new HtmlTextWriter(r.Output));



            r.Write("</body></HTML>");
            r.Flush();
            r.End();
        }


        private void LoadDepositoVenta()
        {
            var labelNameFormat = Request.QueryString["format"];
            var r = Response;
            r.Clear();

            var proyecto = DbUtil.Db.Proyectos.SingleOrDefault(p => p.idInternal == idProyecto.Value.ToInt());

            string header =
                @"<html xmlns:x=""urn:schemas-microsoft-com:office:excel"">
                <head>
                    <style>
                    <!--table
                    br {mso-data-placement:same-cell;}
                    tr {vertical-align:top;}
                    -->
                    </style>
                </head>
                <body>";
            r.Charset = "";

            if (proyecto == null)
            {
                r.Write("No se tiene información");
                r.Flush();
                r.End();
            }

            r.ContentType = "application/vnd.ms-excel";
            r.AddHeader("Content-Disposition", "attachment;filename=depositoVenta_{0}.xls".Fmt(proyecto.descripcion));


            r.Write(header);

            var useTitles = Request.QueryString["type"];

            
            string cliente = Request.QueryString["clienteStr"];

            string idcuenta = Request.QueryString["idcuenta"];
            string numero = Request.QueryString["numero"];
            string fechaInicio = Request.QueryString["fechaInicio"];
            string fechaFin = Request.QueryString["fechaFin"];

                                               



            GridView8.EnableViewState = false;
            GridView8.DataSource = new BOL.RendicionVentas.GetDepositoVentaExcel().Execute(proyecto.idInternal,
                                                                                           idcuenta.ToInt(),
                                                                                        cliente,
                                                                                        numero,
                                                                                        idcuenta.ToInt(),
                                                                                        fechaInicio.ToDate().Value,
                                                                                        fechaFin.ToDate().Value);
            GridView8.DataBind();
            GridView8.RenderControl(new HtmlTextWriter(r.Output));




            r.Write("</body></HTML>");
            r.Flush();
            r.End();
        }

        private void LoadProforma()
        {
            var labelNameFormat = Request.QueryString["format"];
            var r = Response;
            r.Clear();

            var proyecto = DbUtil.Db.Proyectos.SingleOrDefault(p => p.idInternal == idProyecto.Value.ToInt());

            string header =
                @"<html xmlns:x=""urn:schemas-microsoft-com:office:excel"">
                <head>
                    <style>
                    <!--table
                    br {mso-data-placement:same-cell;}
                    tr {vertical-align:top;}
                    -->
                    </style>
                </head>
                <body>";
            r.Charset = "";

            if (proyecto == null)
            {
                r.Write("No se tiene información");
                r.Flush();
                r.End();
            }

            r.ContentType = "application/vnd.ms-excel";
            r.AddHeader("Content-Disposition", "attachment;filename=Proforma_{0}.xls".Fmt(proyecto.descripcion));


            r.Write(header);
            var useTitles = Request.QueryString["type"];


            var idEtapa = Request.QueryString["idEtapa"].ToInt();
            string cliente = Request.QueryString["clienteStr"];

            string codigoVenta = Request.QueryString["uiStr"];
            string numero = Request.QueryString["numero"];



            GridView7.EnableViewState = false;
            GridView7.DataSource = new BOL.Ventas.GetProformaExcel().Execute(proyecto.idInternal,
                                                                                 idEtapa,
                                                                                 cliente,
                                                                                 codigoVenta,
                                                                                  numero);
            GridView7.DataBind();
            GridView7.RenderControl(new HtmlTextWriter(r.Output));




            r.Write("</body></HTML>");
            r.Flush();
            r.End();
        }
        

           private void LoadOrdenVenta()
        {
            var labelNameFormat = Request.QueryString["format"];
            var r = Response;
            r.Clear();

            var proyecto = DbUtil.Db.Proyectos.SingleOrDefault(p => p.idInternal == idProyecto.Value.ToInt());

            string header =
                @"<html xmlns:x=""urn:schemas-microsoft-com:office:excel"">
                <head>
                    <style>
                    <!--table
                    br {mso-data-placement:same-cell;}
                    tr {vertical-align:top;}
                    -->
                    </style>
                </head>
                <body>";
            r.Charset = "";

            if (proyecto == null)
            {
                r.Write("No se tiene información");
                r.Flush();
                r.End();
            }
            
            r.ContentType = "application/vnd.ms-excel";
            r.AddHeader("Content-Disposition", "attachment;filename=OrdenVenta_{0}.xls".Fmt(proyecto.descripcion));

            
            r.Write(header);
            var useTitles = Request.QueryString["type"];

          
            var idEtapa = Request.QueryString["idEtapa"].ToInt();
            string cliente = Request.QueryString["clienteStr"];
            string codigoVenta = Request.QueryString["uiStr"];
            string numero = Request.QueryString["numero"];
            int tipoModelo = Request.QueryString["cuentaAhorro"].ToInt();
            int tipoVivienda = Request.QueryString["tipoVivienda"].ToInt();
            int cuentaAhorro = Request.QueryString["cuentaAhorro"].ToInt();
            int idEstado = Request.QueryString["idEstado"].ToInt();
               
            DateTime fechaInicio = Request.QueryString["fechaInicio"].ToDate().Value;
            DateTime fechaFin = Request.QueryString["fechaFin"].ToDate().Value;
               
            
            GridView6.EnableViewState = false;
            GridView6.DataSource = new BOL.Ventas.GetOrdenVentaExcel().Execute(proyecto.idInternal,
                                                                                fechaInicio,fechaFin,
                                                                                    idEtapa,
                                                                                    tipoVivienda,
                                                                                     cuentaAhorro,
                                                                                     idEstado,
                                                                                    cliente,
                                                                                    codigoVenta,
                                                                                     numero);
            GridView6.DataBind();
            GridView6.RenderControl(new HtmlTextWriter(r.Output));
            

            r.Write("</body></HTML>");
            r.Flush();
            r.End();

        }

        private void LoadCentroCostoExcel()
        {
            
            
            var labelNameFormat = Request.QueryString["format"];
            var r = Response;
            r.Clear();
            
            var login = Session["idEmpleado"];
            
            var obra = DbUtil.Db.Obras.SingleOrDefault(p => p.idInternal == idObra.Value.ToInt());

            string header =
                @"<html xmlns:x=""urn:schemas-microsoft-com:office:excel"">
                <head>
                    <style>
                    <!--table
                    br {mso-data-placement:same-cell;}
                    tr {vertical-align:top;}
                    -->
                    </style>
                </head>
                <body>";
            r.Charset = "";

            if (obra==null)
            {
                r.Write("No se tiene información");
                r.Flush();
                r.End();
            }
            if (login != null)
            {
                r.ContentType = "application/vnd.ms-excel";
                r.AddHeader("Content-Disposition", "attachment;filename=CentroCosto_{0}.xls".Fmt(obra.centroCosto));
                                                                                                
            }
            r.Write(header);
            var useTitles = Request.QueryString["type"];

            GridView1.EnableViewState = false;
            GridView1.DataSource = new BOL.CentroCosto.GetRecepcionDocExcel().Execute(idObra.Value.ToInt()).OrderBy(p=>p.FR);

            GridView1.DataBind();
            GridView1.RenderControl(new HtmlTextWriter(r.Output));

            r.Write("</body></HTML>");
            r.Flush();
            r.End();
        }

        private void LoadComparativo()
        {


            var labelNameFormat = Request.QueryString["format"];
            var r = Response;
            r.Clear();

            var login = Session["idEmpleado"];

            var obra = DbUtil.Db.Obras.SingleOrDefault(p => p.idInternal == idObra.Value.ToInt());

            string header =
                @"<html xmlns:x=""urn:schemas-microsoft-com:office:excel"">
                <head>
                    <style>
                    <!--table
                    br {mso-data-placement:same-cell;}
                    tr {vertical-align:top;}
                    -->
                    </style>
                </head>
                <body>";
            r.Charset = "";

            if (obra == null)
            {
                r.Write("No se tiene información");
                r.Flush();
                r.End();
            }
            if (login != null)
            {
                r.ContentType = "application/vnd.ms-excel";
                r.AddHeader("Content-Disposition", "attachment;filename=Comparativo_{0}.xls".Fmt(obra.centroCosto));

            }
            r.Write(header);
            var useTitles = Request.QueryString["type"];

            GridView2.EnableViewState = false;
            GridView2.DataSource = new BOL.Comparativos.GetComparativoExcel().Execute(idObra.Value.ToInt()).OrderBy(p => p.CODIGO);

            GridView2.DataBind();
            GridView2.RenderControl(new HtmlTextWriter(r.Output));

            r.Write("</body></HTML>");
            r.Flush();
            r.End();
        }



        private void LoadOrdenCompraItem()
        {
            var labelNameFormat = Request.QueryString["format"];
            var r = Response;
            
            r.Clear();

            var login = Session["idEmpleado"];

            var obra = DbUtil.Db.Obras.SingleOrDefault(p => p.idInternal == idObra.Value.ToInt());

            string header =
                @"<html xmlns:x=""urn:schemas-microsoft-com:office:excel"">
                <head>
                    <style>
                    <!--table
                    br {mso-data-placement:same-cell;}
                    tr {vertical-align:top;}
                    -->
                    </style>
                </head>
                <body>";
            r.Charset = "";

            if (obra == null)
            {
                r.Write("No se tiene información");
                r.Flush();
                r.End();
            }
            if (login != null)
            {
                r.ContentType = "application/vnd.ms-excel";
                r.AddHeader("Content-Disposition", "attachment;filename=OrdenCompraRecursos_{0}.xls".Fmt(obra.centroCosto));

            }
            r.Write(header);
            var useTitles = Request.QueryString["type"];

            int idsubfamilia = Request.QueryString["idSubFamilia"].ToInt();
            int idFamilia= Request.QueryString["idFamilia"].ToInt();
            int idClase= Request.QueryString["idclase"].ToInt();
            int anio = Request.QueryString["anio"].ToInt();
            int mes = Request.QueryString["mes"].ToInt();

          
            GridView10.EnableViewState = false;
            GridView10.DataSource = new BOL.Compras.GetOrdenCompraItemExcel().Execute(idObra.Value.ToInt(),idClase,idFamilia,idsubfamilia,anio,mes);
            GridView10.DataBind();
            GridView10.RenderControl(new HtmlTextWriter(r.Output));

            r.Write("</body></HTML>");
            r.Flush();
            r.End();
        }


        private void LoadOrdenCompra(int idTipoOrden)
        {
            var labelNameFormat = Request.QueryString["format"];
            var r = Response;
            r.Clear();

            var login = Session["idEmpleado"];

            var obra = DbUtil.Db.Obras.SingleOrDefault(p => p.idInternal == idObra.Value.ToInt());

            string header =
                @"<html xmlns:x=""urn:schemas-microsoft-com:office:excel"">
                <head>
                    <style>
                    <!--table
                    br {mso-data-placement:same-cell;}
                    tr {vertical-align:top;}
                    -->
                    </style>
                </head>
                <body>";
            r.Charset = "";

            if (obra == null)
            {
                r.Write("No se tiene información");
                r.Flush();
                r.End();
            }
            if (login != null)
            {
                r.ContentType = "application/vnd.ms-excel";
                r.AddHeader("Content-Disposition", "attachment;filename=OrdenCompra_{0}.xls".Fmt(obra.centroCosto));

            }
            r.Write(header);
            var useTitles = Request.QueryString["type"];

            GridView3.EnableViewState = false;
            GridView3.DataSource = new BOL.Compras.GetOrdenCompraExcel().Execute(idObra.Value.ToInt(), 
                                        idTipoOrden).OrderBy(p => p.numDocumento);

            GridView3.DataBind();
            GridView3.RenderControl(new HtmlTextWriter(r.Output));

            r.Write("</body></HTML>");
            r.Flush();
            r.End();
        }



        private void LoadUI()
        {
            var labelNameFormat = Request.QueryString["format"];
            var r = Response;
            r.Clear();

            var proyecto = DbUtil.Db.Proyectos.SingleOrDefault(p => p.idInternal == idProyecto.Value.ToInt());

            string header =
                @"<html xmlns:x=""urn:schemas-microsoft-com:office:excel"">
                <head>
                    <style>
                    <!--table
                    br {mso-data-placement:same-cell;}
                    tr {vertical-align:top;}
                    -->
                    </style>
                </head>
                <body>";
            r.Charset = "";

            if (proyecto == null)
            {
                r.Write("No se tiene información");
                r.Flush();
                r.End();
            }
            
            r.ContentType = "application/vnd.ms-excel";
            r.AddHeader("Content-Disposition", "attachment;filename=UI_{0}.xls".Fmt(proyecto.descripcion));

            
            r.Write(header);
            var useTitles = Request.QueryString["type"];

          
            var idEtapa = Request.QueryString["idEtapa"].ToInt();
            int idLocalizacion = Request.QueryString["idLocalizacion"].ToInt();
            string codigoVenta = Request.QueryString["codigoVenta"];
            int tipoVivienda = Request.QueryString["tipoVivienda"].ToInt();
            int tipoModelo = Request.QueryString["tipoModelo"].ToInt();
            int idEstado = Request.QueryString["idEstado"].ToInt();


            if (proyecto.idActividad == 4) //edificacion
            {
                GridView4.EnableViewState = false;
                GridView4.DataSource = new BOL.UI.GetUIExcel().ExecuteDepartamento(proyecto.idInternal,
                                                                                    idEtapa,
                                                                                    idLocalizacion,
                                                                                    codigoVenta,
                                                                                    tipoVivienda,
                                                                                    tipoModelo,
                                                                                    idEstado).OrderBy(p => p.descripcion);
                GridView4.DataBind();
                GridView4.RenderControl(new HtmlTextWriter(r.Output));
            }
            else
            {
                GridView5.EnableViewState = false;
                GridView5.DataSource = new BOL.UI.GetUIExcel().ExecuteLote(proyecto.idInternal,
                                                                                    idEtapa,
                                                                                    idLocalizacion,
                                                                                    codigoVenta,
                                                                                    tipoVivienda,
                                                                                    tipoModelo,
                                                                                    idEstado).OrderBy(p => p.descripcion);
                GridView5.DataBind();
                GridView5.RenderControl(new HtmlTextWriter(r.Output));
            }
            

            r.Write("</body></HTML>");
            r.Flush();
            r.End();
        }


     
        //private static int maxExcelRows
        //{
        //    get { return DbUtil.Db.Setting("MaxExcelRows", "10000").ToInt(); }
        //}
        public override void VerifyRenderingInServerForm(System.Web.UI.Control control)
        {
        }



        protected void GridView9_RowDataBound(Object sender, GridViewRowEventArgs e)
        {
            //e.Row.Cells[0].BackColor = Color.FromName("#99CCFF");

            if (e.Row.RowType == DataControlRowType.DataRow)
            {

                var item = (BOL.Ventas.OrdenVentaFormatoDetalleInfo)(e.Row.DataItem);
                bool esTotal = item.esTotal;


                if (esTotal)
                {
                    e.Row.BackColor = Color.LightYellow;
                    e.Row.Font.Bold = true;
                }
                e.Row.Cells[9].ForeColor = (item.hasta30 > 0) ? Color.Red : Color.Green;
                e.Row.Cells[10].ForeColor = (item.hasta3060 > 0) ? Color.Red : Color.Green;
                e.Row.Cells[11].ForeColor = (item.hasta60mas > 0) ? Color.Red : Color.Green;


            }
        }


        protected void GridView11_RowDataBound(Object sender, GridViewRowEventArgs e)
        {
            //e.Row.Cells[0].BackColor = Color.FromName("#99CCFF");

            if (e.Row.RowType == DataControlRowType.DataRow)
            {

                var item = (BOL.Ventas.OrdenVentaDetalleInfo)(e.Row.DataItem);
                bool esTotal = item.esTotal;


                if (esTotal)
                {
                    e.Row.BackColor = Color.LightYellow;
                    e.Row.Font.Bold = true;
                }

                
                e.Row.Cells[e.Row.Cells.Count-1].ForeColor = (item.saldo > 0) ? Color.Red : Color.Green;
                e.Row.Cells[e.Row.Cells.Count-2].ForeColor = (item.totalPago > 0) ? Color.Green : Color.Red;


            }
        }


        protected void GridView12_RowDataBound(Object sender, GridViewRowEventArgs e)
        {
            //e.Row.Cells[0].BackColor = Color.FromName("#99CCFF");

            if (e.Row.RowType == DataControlRowType.DataRow)
            {

                var item = (BOL.Ventas.OrdenVentaAnuladoDetalleInfo)(e.Row.DataItem);
                bool esTotal = item.esTotal;


                if (esTotal)
                {
                    e.Row.BackColor = Color.LightYellow;
                    e.Row.Font.Bold = true;
                }


                //e.Row.Cells[e.Row.Cells.Count - 1].ForeColor = (item. > 0) ? Color.Red : Color.Green;
                //e.Row.Cells[e.Row.Cells.Count - 2].ForeColor = (item.totalPago > 0) ? Color.Green : Color.Red;


            }
        }
    }
}